//JPAMotoristaDAO.java
//Classe dao do Motorista para JPA
package dao;

import java.util.List;
import javax.persistence.Query;
import modelo.Motorista;

/**
 * @author Diego Heusser
 * @author Eder Schramm
 */
public class JPAMotoristaDAO extends JPADAO implements MotoristaDAO {

    @Override
    public boolean inserir(Motorista umMotorista) {
        try {
            em.getTransaction().begin();
            em.persist(umMotorista);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public boolean alterar(Motorista umMotorista) {
        try {
            em.getTransaction().begin();
            em.merge(umMotorista);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public boolean remover(int id) {
        try {
            em.getTransaction().begin();
            modelo.Motorista motorista = em.find(modelo.Motorista.class, id);
            em.remove(motorista);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public List<Motorista> listar() {
        Query consulta = em.createQuery("SELECT m FROM Motorista m");
        List<Motorista> lista = consulta.getResultList();
        return lista;
    }

    @Override
    public List<Motorista> listarFisico() {
        throw new UnsupportedOperationException("Não é possível listar físico com JPA.");
    }

    @Override
    public boolean idValido(int id) {
        Query consulta = em.createQuery("SELECT m FROM Motorista m WHERE m.id = :id");
        consulta.setParameter("id", id);
        List<Motorista> lista = consulta.getResultList();
        return lista.isEmpty();
    }

    @Override
    public List<Motorista> listar(String nome) {
        Query consulta = em.createQuery("SELECT m FROM Motorista m WHERE m.nome LIKE :nome");
        consulta.setParameter("nome", nome+"%");
        List<modelo.Motorista> lista = consulta.getResultList();
        return lista;
    }

    @Override
    public boolean apagarDados() {
        try {
            for (modelo.Motorista umMotorista : listar()) {
                em.getTransaction().begin();
                em.remove(umMotorista);
                em.getTransaction().commit();
            }
            return true;
        } catch (Exception ex ) {
            return false;
        }
    }

    @Override
    public boolean criarTabela() {
        throw new UnsupportedOperationException("Não é possível criar a tabela com JPA.");
    }
    
}
